public & protected
data member를 public으로 선언해 주면,
모두가 해당 멤버에 대하여 읽기 및 쓰기 접근 권한을 가지게 된다.
하지만, data member를 private으로 구현하고, 이를 제어하는 메서드(멤버 함수)를 public으로 구현시,
해당 값에 대한 접근불가, 읽기 전용, 읽기 쓰기 접근 등을 사용자가 제어할 수 있게 만들 수 있다.
캡슐화(Encapsulation)함수를 통해서만 멤버에 접근 할수 있도록 구현할 경우,
데이터 멤버를 계산식으로 대체할 수 있으며, 사용자가 임의로 접근하는 것을 제한할 수 있다.
또한 이와같은 캡슐화는 구현상의 융통성을 제공할 수 있다.
데이터 멤버를 읽거나 쓸 때, 다른 객체에 알림 메세지를 보낸다거나,
클래스의 불변속성 및 사전조건(precondition), 사후조건(postcondition)을 검증한다거나,
스레딩 환경에서 동기화 제어등을 할 수 있다.
public이나 protected로 선언된 멤버들을 수정해야 하는 경우,
이와 연관된 멤버와 파생 클래스의 멤버들을 모두 변경해야 하는 등, 많은 복잡성을 야기한다.
private은 캡슐화를 제공하기 때문에 이에 대하여 훨씬 안정적이다.